<?php

namespace App\Http\Controllers\Api;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User;
use Auth;
use JWTAuth;

class AuthController extends Controller
{

  //通过小程序 wx.login 得到的code 换取 token 
  public function token(Request $request){

    // dd(config('wechat.mini_program.default'));
    // 获取app
    $app = \EasyWeChat\Factory::MiniProgram(config('wechat.mini_program.default'));
    
    // 换取 openid
    $ret = $app->auth->session($request->get('code'));
    // 推荐人id
    $fromid = intval($request->get('fromid'));
    
    // dd($ret );
    if( array_get($ret, 'errcode') ){
      return response()->json($ret);
    }
    $openid = array_get($ret,'openid');
    $session_key = array_get($ret,'session_key');

    $user = User::firstOrNew(['openid'=>$openid]);
    
    if ( !$user->id ) { // 新用户访客
      // 如果该用户不存在则将其保存到 users 表
      $user->session_key = $session_key;
      $user->fromid = $fromid;
      if($fromid){ // 如果新用户有推荐人
        $fromuser = User::find($fromid);
        $user->ancestorid = intval($fromuser->fromid);
      }
      $user->save();
    }

    // 保存最新 session key (解密用户公开个人信息数据包用)))
    if( $user->session_key !== $session_key ){
      $user->session_key = $session_key;
      $user->save();
    }

    Auth::login($user); // 用户登录
    $token = JWTAuth::fromUser(Auth::user());   //生成 jwt token 

    $success['token'] =  $token;
    $success['uid'] =  $user->id; // 返回用户ID
    $success['uploadApi'] = url("/api/upload/{$user->id}/file") ; // 控制用户图片上传接口（特别提醒，这个接口是图片上传接口，不能动，不能动，不能动）
    $success['authorize'] = config('cms.authorized_posting'); // 控制发帖状态（后期可自行控制每个用户是否可以发帖）
    $success['isguest'] = $user->name && $user->avatar?0:1; // 返回是否需要登录


    $success['share_title'] = '自定义分享标题'; //自定义首页分享标题
    $success['share_cover'] = ''; //自定义首页分享标题
    $success['appid'] = config('wechat.mini_program.default.app_id'); // 把APPID传回小程序配置里面
    $success['topiccolor'] = 'blue'; // 主题颜色控制
    $success['bgcolor'] = 'bg-blue';  // 主题背景色控制
    
    return response()->json($success);
  }

  // 该接口通过获取 uid 和 postid 返回参数
  public function getQrcode(Request $request){
    $postid = intval($request->get('postid'));
    $uid = intval($request->get('uid'));
    $app = \EasyWeChat\Factory::MiniProgram(config('wechat.mini_program.default'));
    // 页面写死路径的和参数的，要就自己调整
    $response = $app->app_code->getUnlimit($postid .','.$uid, [
      'page'  => 'pages/post/info',
      'width' => 160,
    ]);
    return response($response, 200, [
      'Content-Type' => 'image/png',
    ]);
  }
}
